home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Graphics Programming (2nd Edition) / Visual Basic Graphics Programming 2nd Edition.iso / Src / Ch10 / Hilbert.frm (.txt) < prev    next >
Visual Basic Form  |  1999-06-08  |  3KB  |  101 lines

  1. VERSION 5.00
  2. Begin VB.Form frmHilbert 
  3.    Caption         =   "Hilbert"
  4.    ClientHeight    =   4335
  5.    ClientLeft      =   2280
  6.    ClientTop       =   900
  7.    ClientWidth     =   5310
  8.    LinkTopic       =   "Form1"
  9.    PaletteMode     =   1  'UseZOrder
  10.    ScaleHeight     =   4335
  11.    ScaleWidth      =   5310
  12.    Begin VB.TextBox txtDepth 
  13.       Height          =   285
  14.       Left            =   480
  15.       MaxLength       =   3
  16.       TabIndex        =   0
  17.       Text            =   "4"
  18.       Top             =   0
  19.       Width           =   375
  20.    End
  21.    Begin VB.PictureBox picCanvas 
  22.       AutoRedraw      =   -1  'True
  23.       Height          =   4335
  24.       Left            =   960
  25.       ScaleHeight     =   285
  26.       ScaleMode       =   3  'Pixel
  27.       ScaleWidth      =   285
  28.       TabIndex        =   3
  29.       Top             =   0
  30.       Width           =   4335
  31.    End
  32.    Begin VB.CommandButton cmdGo 
  33.       Caption         =   "Go"
  34.       Default         =   -1  'True
  35.       Height          =   375
  36.       Left            =   120
  37.       TabIndex        =   1
  38.       Top             =   480
  39.       Width           =   615
  40.    End
  41.    Begin VB.Label Label1 
  42.       Caption         =   "Depth"
  43.       Height          =   255
  44.       Index           =   0
  45.       Left            =   0
  46.       TabIndex        =   2
  47.       Top             =   0
  48.       Width           =   495
  49.    End
  50. Attribute VB_Name = "frmHilbert"
  51. Attribute VB_GlobalNameSpace = False
  52. Attribute VB_Creatable = False
  53. Attribute VB_PredeclaredId = True
  54. Attribute VB_Exposed = False
  55. Option Explicit
  56. Private Sub cmdGo_Click()
  57. Dim depth As Integer
  58. Dim total_length As Single
  59. Dim start_x As Single
  60. Dim start_y As Single
  61. Dim start_length As Single
  62.     picCanvas.Cls
  63.     MousePointer = vbHourglass
  64.     DoEvents
  65.     ' Get the parameters.
  66.     If Not IsNumeric(txtDepth.Text) Then txtDepth.Text = "5"
  67.     depth = CInt(txtDepth.Text)
  68.     ' See how big we can make the curve.
  69.     If picCanvas.ScaleHeight < picCanvas.ScaleWidth Then
  70.         total_length = 0.9 * picCanvas.ScaleHeight
  71.     Else
  72.         total_length = 0.9 * picCanvas.ScaleWidth
  73.     End If
  74.     start_x = (picCanvas.ScaleWidth - total_length) / 2
  75.     start_y = (picCanvas.ScaleHeight - total_length) / 2
  76.     ' Compute the side length for this level.
  77.     start_length = total_length / (2 ^ depth - 1)
  78.     ' Draw the curve.
  79.     picCanvas.CurrentX = start_x
  80.     picCanvas.CurrentY = start_y
  81.     Hilbert depth, start_length, 0
  82.     MousePointer = vbDefault
  83. End Sub
  84. ' Draw a hilbert curve.
  85. Private Sub Hilbert(ByVal depth As Integer, ByVal dx As Single, ByVal dy As Single)
  86.     If depth > 1 Then Hilbert depth - 1, dy, dx
  87.     picCanvas.Line -Step(dx, dy)
  88.     If depth > 1 Then Hilbert depth - 1, dx, dy
  89.     picCanvas.Line -Step(dy, dx)
  90.     If depth > 1 Then Hilbert depth - 1, dx, dy
  91.     picCanvas.Line -Step(-dx, -dy)
  92.     If depth > 1 Then Hilbert depth - 1, -dy, -dx
  93. End Sub
  94. Private Sub Form_Resize()
  95. Dim wid As Single
  96.     wid = ScaleWidth - picCanvas.Left
  97.     If wid < 120 Then wid = 120
  98.     picCanvas.Move picCanvas.Left, 0, _
  99.         wid, ScaleHeight
  100. End Sub
  101.